<?php
require_once 'NotesHandler.php';
require_once 'NotesView.php';
require_once 'ErrorView.php';
require_once 'FormValidation.php';
require_once 'LoginView.php';
require_once 'LoginHandler.php';

class NotesController
{
    private $m_database = NULL;
	private $m_tablePrefix = NULL;

    public function __construct(DatabaseConnection $database)
    {
        $this->m_database = $database;
		$this->m_tablePrefix = $database->getTablePrefix();
    }
	
    public function doControll()
    {
        $xhtml = "";

        // Skapar instanser av ErrorView, NotesHandler, NotesView.
        $ErrorView = new ErrorView();
        $NotesHandler = new NotesHandler($this->m_database);
        $NotesView = new NotesView();
		
		// Visar newNote formuläret.
        $xhtml .= $NotesView->NewNoteForm();
		
		// Har användaren försökt skapa en ny note?
		if ($NotesView->triedToCreateNewNote() == true)
		{
			// Validering av NoteName
			if ($NotesView->getNewNoteName() == false)
			{
				// Fel vid validering av notename.
                $xhtml .= $ErrorView->showMessage(13, "error");
			}
			else if ($NotesView->getNewNoteContent() == false)
			{
				// Fel vid validering av notecontent.
                $xhtml .= $ErrorView->showMessage(14, "error");
			}
			// Lägger till note i databasen.
			else if ($NotesHandler->addNote($NotesView->getNewNoteName(),
                        $NotesView->getNewNoteContent(), $NotesView->getNoteDateTime(),
                        $NotesView->getUserId()) == false)
						{
							// Skapande av ny note misslyckades.
                        	$xhtml .= $ErrorView->showMessage(12, "error");
						}
		}
		// Har användaren försökt ta bort en note.
		else if ($NotesView->triedToRemoveNote() == true)
		{
			// Kontrollerar så att noteId finns i databasen.
			if ($NotesHandler->doesNoteExist($NotesView->getNoteId()) == false)
			{
				// visa felmeddelande, noteId finns inte.
				$xhtml .= $ErrorView->showMessage(15, "error");
			}
			else
			{
				// Radera note.
				$NotesHandler->removeNote($NotesView->getNoteId());
				
				// Kolla om användaren har notes.
				if ($NotesHandler->hasNotes($NotesView->getUserId()) == false)
				{
					// Skriver ut tips-meddelande, skriv ny note.
            		$xhtml .= $ErrorView->showMessage(10, "hint");
				}
			}
		}
		// Har användaren inte några notes.
		else if ($NotesHandler->hasNotes($NotesView->getUserId()) == false)
        {
            // Skriver ut tips-meddelande, skriv ny note.
            $xhtml .= $ErrorView->showMessage(10, "hint");
		}
		
		// Har användaren försökt redigera en note.
		else if ($NotesView->triedToEditNote() == true)
		{	
			// doesNoteExist - kontrollerar om note finns.
			if ($NotesHandler->doesNoteExist($NotesView->getNoteId()) == false)
			{
				// visa felmeddelande, noteId finns inte.
				$xhtml .= $ErrorView->showMessage(15, "error");
			}
			else
			{
				// Lagras i $Note -  returnerar ett note-objekt.
				$note = $NotesHandler->getNote($NotesView->getNoteId());
				
				// Skickar note-fält till forumläret. och skriver ut detta.
				$xhtml .= $NotesView->editNoteForm($note);
			}
		}
		else if($NotesView->triedToUpdateNote() == true)
		{
			// Validering av NoteName
			if ($NotesView->getNewNoteName() == false)
			{
				// Fel vid validering av notename.
                $xhtml .= $ErrorView->showMessage(13, "error");
			}
			else if ($NotesView->getNewNoteContent() == false)
			{
				// Fel vid validering av notecontent.
                $xhtml .= $ErrorView->showMessage(14, "error");
			}
			else
			{
				// Lägger in den uppdaterade noten till databasen.
				$NotesHandler->updateNote($NotesView->getNoteId(), $NotesView->getNewNoteName(), 
				$NotesView->getNewNoteContent(), $NotesView->getNoteDateTime());
			}						
		}
		
		$LoginView = new LoginView();
		$LoginHandler = new LoginHandler($this->m_database);
		// om admin är inloggad, hämta adminNotes.
		if ($LoginHandler->isUserAdmin($LoginView->getSessionUsername()) == true)
		{
			// Hämta adminnotes.
			$xhtml .= $NotesView->showNotes($NotesHandler->getAdminNotes());
		}
		else
		{
			// Hämta adminnotes.
			$xhtml .= $NotesView->showAdminNotes($NotesHandler->getAdminNotes());
			
			// Skriver ut användarens notes.
        	$xhtml .= $NotesView->showNotes($NotesHandler->getNotes($NotesView->getUserId()));
		}
		
        return $xhtml;
    }
}